Pointer

Published

2025-11-12

Modified

2025-11-12

Person *p;

这一句是定义变量:

所以: 👉 p 本身是个指针变量,它里面存的是一个地址。 👉 这个地址必须是某个 Person 类型对象的地址。


2. &tom

Person tom;
&tom;
  • tom 是一个 Person 类型的结构体变量。
  • &tom 表示“取 tom 的地址”。
  • &tom 的类型是 Person*

这与 p 的类型刚好匹配。


3. p = &tom

p = &tom;

tom 的地址存进 p。结果是:p 指向 tom

内存可以想象成这样:

tom (类型 Person)          p (类型 Person*)
+------------------+       +----------------+
| name[32]         |       | 0x1000 (地址) |
| age              |       +----------------+
+------------------+
      ^
      |
      +---- p 里面存的就是 tom 的地址 0x1000

4. *p 的意思

  • p 是一个指针,存了地址。
  • *p 表示“解引用”这个指针,找到它指向的对象”。
  • 所以 *p 的类型是 Person,等价于“tom 本身”。

示例:

(*p).age = 20;   // 相当于 tom.age = 20;

5. 和 -> 的关系

因为 (*p).age 太啰嗦,C 提供简写:

p->age = 20;   // 等价于 (*p).age

✅ 总结一句

  • p 是个指针变量,里面存的是 tom 的地址。
  • *p 不是“指针”,而是“指针所指的对象”(即 tom)。
  • &tom 是取 tom 的地址,正好能赋值给 p

```


qua